﻿Public Class frmElevesCredit
    Public pNo_ligne As Integer

    Private szSQL As String
    Private rs As ADODB.Recordset

    Private Sub frmElevesCredit_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
        TE_INTITULE.Focus()
    End Sub

    Private Sub frmElevesCredit_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        InitComboModes()
        CompteToScreen()

        ' interdire de modifier un réglement antérieur à aujourd'hui
        If (gUserAcces < 9 And DateDiff(DateInterval.Day, TE_DATE.Value, Now) > 0) And TE_CREDIT.Value Then
            BO_ENREGISTRER.Enabled = False
        Else
            BO_ENREGISTRER.Enabled = True
        End If
        If gUserAcces < 9 Then
            TE_MT_VAL.Enabled = False
            TE_DATE_VAL.Enabled = False
            If DateDiff(DateInterval.Day, TE_DATE.Value, Now) <> 0 Then
                TE_CREDIT.Enabled = False
                TE_DATE.Enabled = False
                CB_MODES.Enabled = False
            Else
                TE_CREDIT.Enabled = True
                TE_DATE.Enabled = True
                CB_MODES.Enabled = True
            End If
        Else
            TE_MT_VAL.Enabled = True
        End If

        ' journée déjà comptabiliser ?
        BO_ENREGISTRER.Enabled = True
        BO_SUPPRIMER.Enabled = True
        ' journée déjà comptabilisée ?
        If TE_DATE_VAL.Text.Length > 0 Then
            If IsExported(CDate(TE_DATE_VAL.Text)) Then
                BO_ENREGISTRER.Enabled = False
                BO_SUPPRIMER.Enabled = False
            End If
        End If

    End Sub

    Private Sub InitComboModes()

        ' vider le combo
        CB_MODES.Items.Clear()
        ' Lire la table MODES DE REGL
        szSQL = "CALL spGet_P_TABLES_byCODE('P_MODE_REGL',0)"
        GetRecordset(ctDSN_AEM, szSQL, rs)
        Do While Not rs.EOF
            CB_MODES.Items.Add(rs.Fields("code").Value & " | " & rs.Fields("lib4").Value)
            rs.MoveNext()
        Loop
        ' Close the recordset AND connection.
        rs.Close()

    End Sub

    Private Sub CompteToScreen()

        If pNo_ligne = 0 Then
            ' creation
            TE_DATE.Value = Now.ToShortDateString
            TE_DATE_VAL.Value = TE_DATE.Value
            CB_MODES.SelectedIndex = 1          ' mode chèque
            TE_CREDIT.Value = 0
            TE_MT1.Value = 0
            ' TE_MT2.Value = 0
            TE_MT3.Value = 0
            TE_INTITULE.Clear()
        Else
            ' Lire l'enreg sélectionné
            szSQL = "CALL spGet_ELEVES_CPT_byNO_LIGNE(" & pNo_ligne & ")"
            GetRecordset(ctDSN_AEM, szSQL, rs)
            If rs.RecordCount > 0 Then
                TE_CD_CLI.Text = rs.Fields("cd_cli").Value
                TE_DATE.Text = rs.Fields("date").Value
                CB_MODES.SelectedIndex = CB_MODES.FindString(rs.Fields("mode_regl").Value)
                TE_INTITULE.Text = nv(rs.Fields("intitule").Value)
                TE_CREDIT.Value = rs.Fields("credit").Value
                TE_MT1.Value = rs.Fields("mt1").Value
                ' TE_MT2.Value = rs.Fields("mt2").Value
                TE_MT3.Value = rs.Fields("mt3").Value
                TE_DATE_VAL.Text = IfDate(rs.Fields("date_valeur").Value)
                TE_MT_VAL.Value = rs.Fields("mtval").Value
                TE_MODIFIE_LE.Text = setModifiedBy(rs.Fields("cree_le").Value, rs.Fields("modif_le").Value, rs.Fields("cd_uti").Value)
            End If
            rs.Close()
            TE_NOLIG.Text = pNo_ligne
        End If

    End Sub

    Private Function IsSaisies_OK() As Boolean

        IsSaisies_OK = False
        ' Jour férié, re-saisie
        If IsHoliday(TE_DATE.Value) Then
            MsgBox(TE_DATE.Value & " est une date non ouvrable !", MsgBoxStyle.Critical)
            TE_DATE.Focus()
            Exit Function
        End If
        ' seul un admin peut anti-dater un réglement
        If DateDiff(DateInterval.Day, TE_DATE.Value, Now) > 0 And gUserAcces < 9 Then
            MsgBox("Date de saisie incorrecte !", MsgBoxStyle.Critical)
            TE_DATE.Focus()
            Exit Function
        End If
        ' interdire saisie date au dela de 180 jours
        If DateDiff(DateInterval.Day, Now.AddDays(180), TE_DATE.Value) > 0 Then
            MsgBox("Date de saisie supérieure à 180 jours !", MsgBoxStyle.Critical)
            TE_DATE.Focus()
            Exit Function
        End If
        If IsExported(TE_DATE_VAL.Value) Then
            TE_DATE.Focus()
            Exit Function
        End If
        If TE_INTITULE.Text.Length = 0 Then
            MsgBox("La saisie de l'intitulé du réglement est obligatoire.", MsgBoxStyle.Critical)
            TE_MT1.Focus()
            Exit Function
        End If
        If CB_MODES.SelectedIndex > 6 And gUserAcces < 9 Then
            MsgBox("Ce mode de réglement n'est pas autorisé.", MsgBoxStyle.Critical)
            CB_MODES.Focus()
            Exit Function
        End If
        If TE_CREDIT.Value <> TE_MT1.Value + TE_MT3.Value Then
            MsgBox("La somme des montants ventilés doit être égale au total du réglement!", MsgBoxStyle.Critical)
            TE_MT1.Focus()
            Exit Function
        End If

        IsSaisies_OK = True

    End Function

    Private Sub TE_CREDIT_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TE_CREDIT.ValueChanged
        ' ventiler les montants
        TE_MT1.Value = TE_CREDIT.Value
        ' TE_MT2.Value = 0
        TE_MT3.Value = 0

    End Sub

    Private Sub CB_MODES_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CB_MODES.SelectedIndexChanged
        If getCodeFromCombo(CB_MODES.SelectedItem) > 5 Then
            LB_MESSAGE.Text = "Cette écriture ne sera exportée en compta car son mode > 5."
        Else
            LB_MESSAGE.Text = ""
        End If

    End Sub

    Private Sub BO_RECHERCHER_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BO_RECHERCHER.Click
        'affiche la liste des libellés de règlement pour sélection
        frmTablesSearch.pTable = "p_libelle_regl"
        frmTablesSearch.pTitre = "Sélectionner un intitulé"
        frmTablesSearch.pLibelle = TE_INTITULE.Text
        frmTablesSearch.ShowDialog()
        If frmTablesSearch.pCode.Length Then
            TE_INTITULE.Text = frmTablesSearch.pLibelle
        End If
    End Sub

    Private Sub BO_ENREGISTRER_Click(sender As System.Object, e As System.EventArgs) Handles BO_ENREGISTRER.Click

        If IsSaisies_OK() Then
            ' puis mise à jour 
            szSQL = "CALL spUpd_ELEVES_CREDIT(" & pNo_ligne & "," & gCD_CLI & ",'" & Format(TE_DATE.Value, "yyyy/MM/dd") & "'," & getCodeFromCombo(CB_MODES.SelectedItem) & ",'" & _
                TE_INTITULE.Text & "'," & TE_CREDIT.Value & "," & TE_MT1.Value & ",0," & TE_MT3.Value & "," & TE_MT_VAL.Value & "," & gUserAgence & ",'" & gUserCode & "')"
            If ExecQuery(ctDSN_AEM, szSQL) Then
                Me.Close()
            End If
        End If

    End Sub

    Private Sub BO_SUPPRIMER_Click(sender As System.Object, e As System.EventArgs) Handles BO_SUPPRIMER.Click
        ' utilisateur autorisé à supprimer un ligne ?
        If IsUserAuthorised(9) = False Then
            Exit Sub
        End If
        ' suppression
        deleteEnregistrement("eleves_cpt", TE_INTITULE.Text, pNo_ligne)
        ' réaffiche la viewlist
        Me.Close()
    End Sub
End Class